Просмотр
XML документов
Как уже
отмечалось, в отличии от HTML,
XML никак не
определяет способ
отображения и
использования описываемых
с его помощью элементов
документа, т.е.
программе-анализатору
предоставляется
возможность самой
выбирать нужное
оформление. Этого требует
принцип независимости
определения внутренней
структуры документа от
способов представления
этой информации. Например,
задавая в документе
элемент <flower>роза</flower>, мы лишь
указываем, что rose в данном
случае является цветком,
но информации о том, как
должен выглядеть данный
элемент документа на
экране клиента и должен ли
он отображаться вообще, в
таком определении нет.
Для того,
чтобы использовать данные,
определяемые элементами XML,
например, отображать их на
экране пользователя,
необходимо написать
программу-анализатор,
которая бы выполняла эти
действия. Уже сегодня
таких программ появилось
достаточное количество и у
разработчиков существует
возможность выбора
наиболее подходящей из них
для решения конкретных
проблем
Как уже
отмечалось ранее, в общем
случае, программы-
анализаторы можно
разделить на две группы:
верифицирующие(т.е.
использующие DTD-
описания для определения
корректности документа) и
не верифицирующие. Если Вы
создаете свой язык и
описываете его грамматику
на основе DTD, то
для анализа документов,
написанных на этом языке,
безусловно, потребуется
программа, проверяющая
корректность составления
документа. Но так как
использование DTD
в XML не является
обязательным, то любой
правильно оформленный
документ может быть
распознан и разобран
программой,
предназначенной для
анализа XML-
документов. В любом случае,
используя универсальные XML-
анализаторы, Вы можете
быть уверенным в том, что
если заданные в документе
конструкции языка
являются синтаксически
правильными, то
программа-анализатор
сможет правильно извлечь
определяемые ими элементы
документа и передать их
прикладной программе,
выполняющей необходимые
действия по отображению.
Т.е. после разбора
документа в большинстве
случаев, Вам
предоставляется объектная
модель, отображающая
содержимое Вашего
документа, и средства,
необходимые для работы с
ней (прохода по дереву
элементов). При этом в
некоторых анализаторах
способ представления
структуры документа
основывается на
спецификации DOM.
Поэтому у Вас появляется
также возможность
использовать строгую
иерархическую модель DOM
для построения
собственных документов.
Если речь
идет о способах
отображения информации,
хранящейся в XML,
то необходимо упомянуть
разрабатываемый в
настоящее время W3C
стандарт стилевых таблиц
для XML, которые
предназначены для
описания правил
отображения элементов XML.
Более подробно мы
поговорим об XSL чуть
позже.
Если
на Вашем компьютере
установлен броузер Internet
Explorer 4 (или более
поздняя версия), то Вы
можете использовать
встроенный в этот броузер XML-
анализатор msxml в своих
сценариях, написанных на Java
Script ил VBScript,.
В настоящий момент
существуют две его
реализации, - одна
предназначена для
использования в виде
написанного на C++ ActiveX-
объекта(реализация на базе
COM- технологии)
другая, написанная на Java,
не зависит от платформы.
Оба анализатора не сложны,
имеют сравнительно
небольшой размер - msxml на
C++ занимает около 100k,
версия на Java - 127k.
Анализатор, написанный на
C++, в текущей реализации не
поддерживает DTD-
правил, более компактный и
быстрый, чем его Java-версия.
Оба они имеют поддержку
иностранных языков, т.е. в
составе Internet Explorer
C++- анализатор работает со
всеми языками,
"понимаемыми"
броузерами, а анализатор
на Java - с теми
языками, с которыми может
работать виртуальная Java-машина.
Т.к.
обе версии
разрабатывались
параллельно, объектная
модель, заложенная в
основу каждой из них,
внешне схожа, поэтому
больших сложностей при
переходе от одной версии к
другой обычно не
возникает.
Рассмотрим
основные свойства и
методы, доступные JavaScript-
сценарию в процессе его
выполнения на стороне
броузера. В наших примерах
мы будем использовать XML-
анализатор в сценариях Java
Script, т.к. этот способ
более понятен и быстрее
работает. Полное описание
C++ интерфейсов анализатора
доступны в документации по
Internet Client SDK
Перед
тем, как использовать
свойства и методы
анализатора, его
необходимо создать.
Делается это при помощи
стандартного метода,
предназначенного для
создания ActiveX-
объектов:
var mydoc = new ActiveXObject("msxml");
Если
ActiveX- компонент
был зарегистрирован на
Вашей машине(или у Вас
установлен броузер Internet
Explorer 4), то в
результате выполнения
этой функции переменной
mydoc будет присвоен объект,
имеющий тип msxml,
свойства и методы которого
используются в дальнейшем
для получения доступа к
структуре XML-
документа.
Объектная
модель XML-
анализатора Microsoft может
быть представлена в виде
следующего набора
внутренних объектов: XML
Document, XML Element и Element
Collection. Объект XML
Document содержит
свойства и методы,
необходимые нам для работы
с XML- документом в
целом. XML Element отвечает
за работу с каждым из
элементов XML-
документа. Element Collection представляет
из себя набор элементов,
доступ к которым доступен
при помощи имени или
порядкового номера. В
следующих примерах мы
рассмотрим каждый из этих
объектов подробнее.
Свойства
и методы документа(объект
XML Document)
URL |
Свойство,
доступное для записи и
чтения. Задает или
возвращает URL
обрабатываемого
документа. В случае
изменения этого
свойства текущий
документ уничтожается
и начинается загрузка
нового по указанному URL |
root |
Возвращает
корневой элемент XML-
документа |
charset |
Свойство,
доступное для записи и
чтения.Возвращает или
устанавливает
название текущее
кодировочной таблицы
согласно требованиям ISO. |
version |
Возвращает
номер версии XML |
doctype |
Возвращает
содержимое элемента !DOCTYPE |
createElement() |
Метод,
позволяющий создать
новый элемент, который
будет добавлен в
качестве дочернего
для текущего элемента
дерева. В качестве
первого параметра
задается тип элемента,
в качестве второго -
название элемента
xml.createElement(0,"new_element") |
fileSize |
Возвращает
размер XML-
документа. Это
свойство в C++- версии
анализатора еще не
реализовано |
fileModifiedDate |
Возвращает
дату последнего
изменения XML-
документа. Это
свойство в C++- версии
анализатора еще не
реализовано |
fileUpdatedDate |
Возвращает
дату последнего
обновления XML-
документа. Это
свойство в C++- версии
анализатора еще не
реализовано |
mimeType |
Возвращает MIME-тип(MIME- Multipurpose
Internet Mail Extension, RFC 1341).Это
свойство в C++- версии
анализатора еще не
реализовано |
Ниже
приведен фрагмент JavaScript-
сценария, использующего эти
методы и свойства для
вывода информации о
текущем документе:
var xmldoc = new ActiveXObject("msxml");
var xmlsrc = "http://localhost/xml/journal.xml";
xmldoc.URL = xmlsrc;
function viewProperties(){
this.document.writeln('<center><table width=90% >');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document URL</td>
<td align="center">'+xmldoc.URL+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document root</td>
<td align="center">'+xmldoc.root+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document doctype</td>
<td align="center">'+xmldoc.doctype+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document version</td>
<td align="center">'+xmldoc.version+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document charset</td>
<td align="center">'+xmldoc.charset+'</td></tr>');
this.document.writeln('</table></center>');
}
Свойства
и методы элементов
документа
type |
Возвращает
тип элемента. Это
свойство может быть
использовано для того,
чтобы разделить имена
тэгов и данные,
содержащиеся внутри
них. В данной версии
анализатора
определены следующие
типы элементов:
0 - элемент
1 - текст
2 - комментарий
3 - Document
4 - DTD |
tagName |
Возвращает
или устанавливает
название тэга(в виде
строки с символами,
приведенными к
верхнему регистру).
Названия
метатэгов(например,
<?xml?>)
начинаются с символа ?.
Названия тэгов
комментариев
начинаются с символа !.
|
text |
Возвращает
текстовое содержимое
элементов и
комментариев. |
AddChild() |
Добавление
нового дочернего
элемента и всех его
потомков в текущую
ветвь дерева. В
качестве первого
параметра этой
функции необходимо
передать объект типа Element,
который затем будет
помещен в список
дочерних элементов.
Также необходимо
задать индекс нового
элемента в списке и в
качестве последнего
параметра обязательно
передать значение -1.
Т.к. в данной модели
любой элемент в
документе может иметь
ссылку только на один
родительский элемент,
при выполнении данной
процедуры у
добавляемого объекта
старая ссылка на
родительский элемент
теряется. Используя
это свойство, можно
перемещать элементы
из одного XML-
документа в другое, но
том случае, если у
дочерних ссылок
перемещаемого
элемента существуют
внешние ссылки или
сами дочерние
элементы ссылаются на
внешние возможно
возникновение ошибки
elem.addChild(elem.children.item().children.item(0),0,-1) |
removeChild() |
Удаляет
дочерний элемент и
всех его потомков.
Элементы остаются в
памяти и могут быть
вновь добавлены к
дереву при помощи
метода addChild().
elem.removeChild(elem.children.item(1)) |
parent |
Возвращает
указатель на текущий
родительский элемент.
Ссылки на
родительский элемент
имеют все элементы, за
исключением
корневого. |
GetAttribute() |
Возвращает
значение указанного
атрибута в виде
текстовой строки.
elem.getAttribute("color") |
SetAttribute() |
Устанавливает
указанный атрибут и
его значение. Прежнее
значение атрибута
теряется
elem.setAttribute("color","red") |
removeAttribute() |
Уничтожает
указанный атрибут
elem.removeAttribute("color") |
children |
Возвращает
ассоциированный
список дочерних
элементов(коллекцию).
Такой список
позволяет приложению
получать нужные
элементы как по
названию, так и по
порядковому номеру
при помощи метода item().
В том случае, если
потомков у текущего
элемента нет, функция
возвратит null |
назад
содержание
вперед
|